#ifndef _ATOM_H
#define _ATOM_H

#include<string>

class SymbolBase;

class Atom
{
public:
	Atom(SymbolBase *pSymbol);
	Atom(char c);

	~Atom(void);

	//if the content is pSymbolBase, return pSymbolBase; 
	//else return NULL, and outC = c;
	SymbolBase *				getSymbol(char & outC);

	std::string					toString();

protected:
	int			m_iAtomType;	//0-pSymbolBase, 1-c;
	typedef union{
		SymbolBase * pSymbolBase;
		char		 c;
	}Content;
	Content					m_oContent;
};

#endif
